草庐IT

c++ - Swig -includeall 除了...

全部标签

c++ - 用于提高中间浮点计算精度的编译器标志

gcc/clang中是否有指定中间浮点计算精度的标志?假设我有一个C代码doublex=3.1415926;doubley=1.414;doublez=x*y;是否有一个编译器标志允许以用户机器的最高可能精度计算'x*y',比如说,long-double(64位尾数),然后截断回double(53位)尾数,声明变量类型的精度)?仅供引用,我在64位机器上使用Ubuntu14.04。 最佳答案 海湾合作委员会[编辑观察到的gcc4.8.4行为,其中默认行为与文档相反]您需要使用x87FPU中的80位寄存器。使用-mfpmath=387

c++ - 与枚举的隐式转换

这是一个基本问题,我希望轻松地谷歌一下,但没有找到答案。假设我有一个枚举:enumabc{a,b,c};支持哪些隐式转换?编译器之间是否有任何编译器扩展或不同行为?我问的是关于到枚举的隐式转换:enumabctest=(**whichtypecanappearhere?**);以及从枚举的隐式转换:(**whichtypecanappearhere?**)test2=test;我想知道C和C++的答案。 最佳答案 正如引用所说:Valuesofunscopedenumerationtypeareimplicitly-converti

c++ - 并行区域中循环的 OpenMP 迭代

抱歉,如果标题不太清楚。我不太清楚怎么说。我想知道是否有任何方法可以执行以下操作:#pragmaompparallel{for(inti=0;i忽略诸如在for循环中省略私有(private)说明符之类的事情,有什么方法可以让我在外循环之外fork线程,以便我可以并行化内循环?根据我的理解(如果我错了请纠正我),所有线程都会执行外循环。我不确定内部循环的行为,但我认为for会将block分发给遇到它的每个线程。我想做的是不必fork/joiniterations次,而只是在外循环中执行一次。这是这样做的正确策略吗?如果有另一个不应并行化的外循环怎么办?那就是……#pragmaomppa

c++ - 在 C++ 中动态创建函数调用

大家好我希望你们能帮我解决这个问题:我目前正在为一种脚本语言实现解释器。该语言需要一个对C函数的本地调用接口(interface),就像java具有JNI一样。我的问题是,我想在不编写包装函数的情况下调用原始C函数,它将我的脚本语言的调用堆栈转换为C调用堆栈。这意味着,我需要一种方法来在运行时生成C函数的参数列表。示例:voida(inta,intb){printf("functionacalled%d",a+b);}voidb(doublea,intb,doublec){printf("functionbcalled%f",a*b+c);}interpreter.registerNa

c++ - 现代 C/C++ 编译器能否更好地优化 header 中的代码?

我经常听说将代码放在header中是不好的做法,但将短函数放在header中很常见,部分原因是为了帮助编译器更好地优化。inline关键字可以帮助编译器确定应该内联哪些函数,但除此之外,是否还有理由在header中包含简短的性能关键函数?还是对于现代编译器来说不再重要了? 最佳答案 从技术上讲,inline关键字仅表示允许在多个翻译单元中定义。也就是说,如果您在头文件中定义了一个内联函数,并且该头文件包含在多个源文件中,那就没问题了。对于非内联、非模板函数,这是非法的。但是编译器可以并且确实利用能够看到被调用函数的代码的优势。这种情

c++ - MPI 是否提供预处理器宏?

MPI标准是否提供预处理器宏,因此如果我的C/C++代码是由支持MPI的编译器编译的,它可以分支?类似于OpenMP的_OPENMP宏。 最佳答案 根据MPIstandard(第335页),您可以检查MPI_VERSION宏:InordertocopewithchangestotheMPIStandard,therearebothcompile-timeandruntimewaystodeterminewhichversionofthestandardisinuseintheenvironmentoneisusing.The"ver

c++ - c 到 c++,在翻译中丢失

我正在尝试将一个工具从C转换为C++,以便我可以编译为CLR。我是.NET专家,所以这完全超出了我的舒适范围。我在下一行有一个编译错误(告诉我这是否是不够的信息):if(qvartype[currQ]==FLOATING)*range*=get_scale(currQ);/*Makerangeunitsmatch*//*dataunits.*/currQ是一个short。该错误在get_scale函数中定义。此函数之前定义为:#defineget_scale(i)((short)pow(10,(int)((long)(cat_names[i]))))...这对我来说看起来很荒谬,深入到

C++ 对象在内存中是连续的吗?

我不太擅长C++,我目前正在将一些代码移植到C。它分配了一大堆对象,如下所示:o_list::Node**nodes=(o_list::Node**)malloc(SIZE*sizeof(o_list::Node*));然后用以下内容填充每个位置:for(intu=0;u据我所知,我们对连续内存的唯一保证是指向对象的指针实际上是连续的,即我们可能会:_____________________|x||x||x||x||x||x||x|x|->contiguousarrayofpointers;|\\|\\______|\\OOO->notcontiguouspositionsofobje

python - 在 C 中访问另一个程序的变量

在python中,可以通过id函数了解变量的内存位置,所以:X="Helloworld!"print(id(X))#Outputisequalto139806692112112(0x7F27483876F0)我试图在C中使用指针访问变量(当然另一个程序仍然存在):#includeintmain(void){char*x=(char*)0x7F27483876F0;printf("%s\n",x);return0;}我编译了代码,没有错误或警告,但是当我尝试运行程序时,操作系统给出了段错误。我该如何解决这个问题?或者有可能吗? 最佳答案

c# - 为包装 C++ 的 swig 生成的 C# 生成 doxygen 注释

我有一个用C++编写的项目,我也在其中使用swig生成一些C#包装器。C++代码使用Doxygen风格的注释来注释类和函数。是否可以让Swig获取这些doxygen注释并为C#包装器类和函数生成doxygen注释? 最佳答案 目前,SWIG根本不解析代码注释,包括Doxygen文档。几年来有一个SWIG分支正在开发中,以使SWIG能够处理Doxygen注释,但即使是目前(AFAIK)也只能将它们映射到Java和Python文档。因此,目前最好的选择是从C++源代码中提取Doxygen文档并将其插入到SWIG生成的包装器中。要了解如何